Various processor designs include processors or coprocessors that are intended to accelerate execution of a given set of processing tasks. Often times, these processors or coprocessors, which may be referred to as “accelerators,” achieve good cost or energy efficiency in particular processing tasks, such as scaling, filtering, transformation, sum of absolute differences, etc. To achieve good efficiency, some accelerators utilize a specialized instruction set that is designed to execute in a highly efficient manner for a given set of tasks.
Writing software code in a specialized instruction set is arduous for programmers because they are required to learn both a new language and its associated syntax. Additionally, debugging software code written in a specialized instruction set may only be performed on machines that can compile the specialized instruction set, which may be inconvenient. However, high-level programming languages such as C may contain many statements that cannot be effectively compiled to the specialized instruction set for execution on an accelerator utilizing that specialized instruction set. Further, statements of a high-level programming language may map to tens or even hundreds of low-level instructions in the specialized instruction set, which reduces the efficiency of code generated for execution by the accelerator using a high-level programming language. Consequently, a programming language that is familiar to programmers, may be easily debugged, and maintains the efficiencies of a target specialized instruction set when translated to the specialized instruction set is desirable.